开始之前:

1. 识别物体输出相关数据

可识别HUSKYLENS 2视野内的物体(须是可识别的80种固定类别物体,详见物体识别功能介绍),获取物体相关数据,可以读取的数据有:画面中可识别物体的总数、靠近HUSKYLENS 2摄像头画面中心的物体ID号、检测到的第一个物体。

示例程序如下。

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *


u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_OBJECT_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
    huskylens.getResult(ALGORITHM_OBJECT_RECOGNITION)
    if (huskylens.available(ALGORITHM_OBJECT_RECOGNITION)):
        line1.config(text=(str("物体总数:") + str((huskylens.getCachedResultNum(ALGORITHM_OBJECT_RECOGNITION)))))
        line2.config(text=(str("已学习物体总数:") + str((huskylens.getCachedResultMaxID(ALGORITHM_OBJECT_RECOGNITION)))))
        line3.config(text=(str("靠中心的物体:") + str((huskylens.getCachedCenterResult(ALGORITHM_OBJECT_RECOGNITION).name if huskylens.getCachedCenterResult(ALGORITHM_OBJECT_RECOGNITION) else -1))))
        line4.config(text=(str("第一个物体的ID:") + str((huskylens.getCachedResultByIndex(ALGORITHM_OBJECT_RECOGNITION, 1 - 1).ID if huskylens.getCachedResultByIndex(ALGORITHM_OBJECT_RECOGNITION, 1 - 1) else -1))))

在Mind+中点击上传到设备,等待程序上传完成。二哈自动进入HUSKYLENS 2的物体识别功能。将HUSKYLENS 2的摄像头对准画面中的物体分别学习,如何学习物体详细操作请看:二哈识图 2 物体识别功能说明,学习完成后,对准该物体,可在屏幕上观察输出结果。

**运行结果:**可按要求输出相应数据,如第一行输出检测到的物体总数,第二行输出的是已学习的物体总数。第三、四行输出的是指定的手势ID号,学习过的手势会按照学习顺序分配ID号,未学习过的手势,其ID号为0。

Interface Diagram

2. 获取画面中指定物体的相关数据

HUSKYLENS 2识别物体后,可获取画面中指定物体的相关数据。例如,判断某个指定的物体是否在画面中、指定物体的名称、可获取画面中指定同类物体的数量,当画面中出现多个同类物体时,可指定获取其中某个物体的相关参数,包括名称、X/Y坐标、宽度、高度。

示例程序如下:

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *


u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_OBJECT_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=110,font_size=18, color="#0000FF")
while True:
    huskylens.getResult(ALGORITHM_OBJECT_RECOGNITION)
    if (huskylens.available(ALGORITHM_OBJECT_RECOGNITION)):
        if ((huskylens.getCachedResultByID(ALGORITHM_OBJECT_RECOGNITION, 2) is not None)):
            line1.config(text=(str("检测到几个ID2:") + str((huskylens.getCachedResultNumByID(ALGORITHM_OBJECT_RECOGNITION, 2)))))
            line2.config(text=(str("ID2物体的名称:") + str((huskylens.getCachedResultByID(ALGORITHM_OBJECT_RECOGNITION, 2).name if huskylens.getCachedResultByID(ALGORITHM_OBJECT_RECOGNITION, 2) else -1))))
            line3.config(text="第一个ID2物体")
            line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_OBJECT_RECOGNITION, 2, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_OBJECT_RECOGNITION, 2, 1-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_OBJECT_RECOGNITION, 2, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_OBJECT_RECOGNITION, 2, 1-1) else -1))))))))

**运行结果:**如图所示,可获取到画面中的物体总数、画面中ID2物体数量、名称,以及检测到的第一个ID2物体的坐标位置。

Interface Diagram